var Template = "/wap/template/";

angular.module("common.utilities.checker", []).config(function () {
    window.checker = {}, checker.isWeixin = function () {
        return navigator.userAgent.toLowerCase().indexOf("micromessenger") > 0
    }, checker.isApple = function () {
        return /ipad|iphone|mac/i.test(navigator.userAgent)
    }
});

var roles = {
    superUser: 0,
    admin: 1,
    user: 2
};
var routeForUnauthorizedAccess = '/SomeAngularRouteForUnauthorizedAccess';



var routeApp = angular.module('routeApp', ['ngRoute', 'common.utilities.checker', 'ngResource']);


routeApp.factory('authorizationService', function ($resource, $q, $rootScope, $location) {
    return {
        // 将权限缓存到 Session，以避免后续请求不停的访问服务器
        permissionModel: { permission: {}, isPermissionLoaded: false },

        permissionCheck: function (roleCollection) {
            // 返回一个承诺(promise).
            var deferred = $q.defer();

            // 这里只是在承诺的作用域中保存一个指向上层作用域的指针。
            var parentPointer = this;

            // 检查是否已从服务获取到权限对象(已登录用户的角色列表)
            if (this.permissionModel.isPermissionLoaded) {

                // 检查当前用户是否有权限访问当前路由
                this.getPermission(this.permissionModel, roleCollection, deferred);
            } else {
                // 如果还没权限对象，我们会去服务端获取。
                // 'api/permissionService' 是本例子中的 web 服务地址。

                $resource('/api/permissionService').get().$promise.then(function (response) {
                    // 当服务器返回之后，我们开始填充权限对象
                    parentPointer.permissionModel.permission = response;

                    // 将权限对象处理完成的标记设为 true 并保存在 Session，
                    // Session 中的用户，在后续的路由请求中可以重用该权限对象
                    parentPointer.permissionModel.isPermissionLoaded = true;

                    // 检查当前用户是否有必须角色访问该路由
                    parentPointer.getPermission(parentPointer.permissionModel, roleCollection, deferred);
                }
                );
            }
            return deferred.promise;
        },

        //方法:检查当前用户是否有必须角色访问该路由
        //'permissionModel' 保存了从服务端返回的当前用户的角色信息
        //'roleCollection' 保存了可访问当前路由的角色列表
        //'deferred' 是用来处理承诺的对象
        getPermission: function (permissionModel, roleCollection, deferred) {
            var ifPermissionPassed = false;

            angular.forEach(roleCollection, function (role) {
                switch (role) {
                    case roles.superUser:
                        if (permissionModel.permission.isSuperUser) {
                            ifPermissionPassed = true;
                        }
                        break;
                    case roles.admin:
                        if (permissionModel.permission.isAdministrator) {
                            ifPermissionPassed = true;
                        }
                        break;
                    case roles.user:
                        if (permissionModel.permission.isUser) {
                            ifPermissionPassed = true;
                        }
                        break;
                    default:
                        ifPermissionPassed = false;
                }
            });
            if (!ifPermissionPassed) {
                // 如果用户没有必须的权限，我们把用户引导到无权访问页面
                $location.path(routeForUnauthorizedAccess);
                // 由于这个处理会有延时，而这期间页面位置可能发生改变， 
                // 我们会一直监视 $locationChangeSuccess 事件
                // 并且当该事件发生的时，就把掉承诺解决掉。
                $rootScope.$on('$locationChangeSuccess', function (next, current) {
                    deferred.resolve();
                });
            } else {
                deferred.resolve();
            }
        }
    };
});


routeApp.config(['$routeProvider', '$locationProvider', function ($routeProvider) {
    $routeProvider
    .when('/index', {  /* ################### 公共部分 ############### */
        title: '用户中心',
        templateUrl: Template + 'index/index.html',
        controller: 'index',
        resolve: {
            permission: function (authorizationService, $route) {
                return authorizationService.permissionCheck([roles.user]);
            },
        }
    }).when('/login', {
        title: '登录',
        templateUrl: Template + 'index/login.html',
        controller: 'login'
    }).when('/no_login', {
        title: '未登录',
        templateUrl: Template + 'index/no_login.html',
        controller: 'login'
    }).when('/register', {
        title: '注册',
        templateUrl: Template + 'index/register.html',
        controller: 'register'
    }).when('/bangka', {   /*############### 用户中心部分 ###############*/
        title: '绑卡',
        templateUrl: Template + 'user/bangka.html',
        controller: 'appCtrl'
    }).when('/chongzhitixian', {
        title: '充值提现',
        templateUrl: Template + 'user/chongzhitixian.html',
        controller: 'appCtrl'
    }).when('/daibanshiyi', {
        title: '待办事宜',
        templateUrl: Template + 'user/daibanshiyi.html',
        controller: 'appCtrl'
    }).when('/haoyoudongtai', {
        title: '好友动态',
        templateUrl: Template + 'user/haoyoudongtai.html',
        controller: 'appCtrl'
    }).when('/leijishouyixiangqing', {
        title: '累计收益详情',
        templateUrl: Template + 'user/leijishouyixiangqing.html',
        controller: 'appCtrl'
    }).when('/leijishouyi', {
        title: '累计收益',
        templateUrl: Template + 'user/leijishouyi.html',
        controller: 'appCtrl'
    }).when('/kaihu', {
        title: '开户',
        templateUrl: Template + 'user/kaihu.html',
        controller: 'appCtrl'
    }).when('/zijinjilu', {
        title: '资金记录',
        templateUrl: Template + 'user/zijinjilu.html',
        controller: 'appCtrl'
    }).when('/rengou', {    /*############### 项目部分 ###############*/
        title: '业务中心',
        templateUrl: Template + 'loan/rengou.html',
        controller: 'appCtrl'
    }).otherwise({
        redirectTo: "/no_login"
    });
}]).run(["$location", "$rootScope", function (e, t) {
    FastClick.attach(document.body), t.$on("$routeChangeSuccess", function (e, n) {
        if (n.$$route && (t.title = n.$$route.title), checker.isApple() && t.title) var o = $("body"), i = $('<iframe src="/wap/images/dot.png"></iframe>').on("load", function () {
            setTimeout(function () {
                var body_bg = $(".body_bg").html();
                if (body_bg) {
                    SetBackGround(body_bg);
                } else {
                    SetBackGround("#FFF");
                }

                i.off("load").remove();
            }, 0);
        }).appendTo(o);
    })
}]);
var APP = routeApp;



routeApp.controller('appCtrl', function ($scope, $location) {
    $scope.BodyClick = function () {
        $(".toolbars").animate({ "left": 0 - $(".toolbars").width() }, "normal", "swing", function () { $(".toolbars").css({ display: "none" }); });
    }
    $scope.OpenBars = function () {
        $(".toolbars").css({ display: "block" }).animate({ "left": 0 }, "normal", "swing", null);
    }
    $scope.Go = function (url) {
        $location.path(url);
    }
    $scope.GoBack = function () {
        window.history.back();
    }
});
